
/* 防抖:触发高频事件后n秒内函数只会执行一次，
如果n秒内高频事件再次被触发，则重新计算时间
使用场景：频繁触发、输入框搜索、表单提交
即：规定时间内只触发一次
*/
export const debounce = (fn, t) => {
	const delay = t || 500
	let timer
	return function () {
		const args = arguments
		if (timer) {
			clearTimeout(timer)
		}
		timer = setTimeout(() => {
			timer = null
			fn.apply(this, args)
		}, delay)
	}
}

/* 节流：高频事件触发，但在n秒内只会执行一次，
所以节流会稀释函数的执行频率
使用场景：频繁触发、onrize，onscroll滚动条、
onresize 事件会在窗口或框架被调整大小时发生
onscroll 滚动条发生时有效
即：规定事件内只执行一次，其余发在规定事件后执行
*/
export const Throttle = (fn, t) => {
	let last
	let timer
	const interval = t || 500
	return function () {
		const args = arguments
		const now = +new Date()
		if (last && now - last < interval) {
			clearTimeout(timer)
			timer = setTimeout(() => {
				last = now
				fn.apply(this, args)
			}, interval)
		} else {
			last = now
			fn.apply(this, args)
		}
	}
}
